{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "# Syft Keras के साथ निजी भविष्यवाणियाँ  (Private Predictions with Syft Keras)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "# चरण 1: सार्वजनिक प्रशिक्षण\n",
    "\n",
    "इस ट्यूटोरियल में आपका स्वागत है! निम्नलिखित पुस्तिकाओं में आप जानेंगे कि निजी भविष्यवाणियाँ कैसे प्रदान करें। निजी भविष्यवाणियों द्वारा, हमारा मतलब है कि डेटा पूरी प्रक्रिया में लगातार एन्क्रिप्टेड है। किसी भी बिंदु पर उपयोगकर्ता कच्चे डेटा को साझा नहीं कर रहा है, केवल एन्क्रिप्टेड (यानी गुप्त साझा) डेटा। इन निजी भविष्यवाणियों को प्रदान करने के लिए, `Syft Keras` हुड के तहत [TF Encrypted](https://github.com/tf-encrypted/tf-encrypted) नामक एक पुस्तकालय का उपयोग करता है। TF एन्क्रिप्टेड अत्याधुनिक क्रिप्टोग्राफिक और मशीन लर्निंग तकनीकों को जोड़ती है, लेकिन आपको इसके बारे में चिंता करने की ज़रूरत नहीं है और अपने मशीन लर्निंग एप्लिकेशन पर ध्यान केंद्रित कर सकते हैं।\n",
    "\n",
    "आप केवल तीन चरणों के साथ निजी भविष्यवाणियों की सेवा शुरू कर सकते हैं:\n",
    "- **चरण 1**: सामान्य केरस के साथ अपने मॉडल को प्रशिक्षित करें।\n",
    "- **चरण 2**: अपने मशीन लर्निंग मॉडल (सर्वर) को सुरक्षित करे और सेवा दें।\n",
    "- **चरण 3**: निजी पूर्वानुमान (ग्राहक) प्राप्त करने के लिए सुरक्षित मॉडल को क्वेरी करें।\n",
    "\n",
    "ठीक है, चलो इन तीन चरणों के माध्यम से चलते हैं ताकि आप उपयोगकर्ता की गोपनीयता या मॉडल सुरक्षा का त्याग किए बिना प्रभावशाली मशीन सीखने की सेवाओं को तैनात कर सकें।\n",
    "\n",
    "लेखक:\n",
    "- Jason Mancuso - Twitter: [@jvmancuso](https://twitter.com/jvmancuso)\n",
    "- Yann Dupis - Twitter: [@YannDupis](https://twitter.com/YannDupis)\n",
    "- Morten Dahl - Twitter: [@mortendahlcs](https://github.com/mortendahlcs)\n",
    "\n",
    "अनुवादक:\n",
    "- Yugandhar Tripathi - Twitter: [@Yugandhar_19](https://twitter.com/Yugandhar_19) · Github: [@Yugandhartripathi](https://github.com/Yugandhartripathi)\n",
    "\n",
    "इनकी ओर से:\n",
    "- Dropout Labs - Twitter: [@dropoutlabs](https://twitter.com/dropoutlabs)\n",
    "- TF Encrypted - Twitter: [@tf_encrypted](https://twitter.com/tf_encrypted)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "## अपने मॉडल को Keras के साथ प्रशिक्षित करें"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "अपनी परियोजनाओं के लिए गोपनीयता-संरक्षण मशीन सीखने की तकनीक का उपयोग करने के लिए आपको एक नई मशीन सीखने की रूपरेखा सीखने की आवश्यकता नहीं होनी चाहिए। यदि आपके पास बुनियादी [Keras](https://keras.io/) ज्ञान है, तो आप इन तकनीकों का उपयोग Syft Keras के साथ शुरू कर सकते हैं। यदि आपने पहले कभी Keras का उपयोग नहीं किया है, तो आप [Keras प्रलेखन](https://keras.io) के माध्यम से इसके बारे में थोड़ा और जान सकते हैं।\n",
    "\n",
    "निजी भविष्यवाणियों की सेवा करने से पहले, अपने मॉडल को सामान्य केरस के साथ प्रशिक्षित करना है। एक उदाहरण के रूप में, हम हस्तलिखित अंकों को वर्गीकृत करने के लिए एक मॉडल को प्रशिक्षित करेंगे। इस मॉडल को प्रशिक्षित करने के लिए हम कैनोनिकल [MNIST डेटासेट](http://yann.lecun.com/exdb/mnist/) का उपयोग करेंगे।\n",
    "\n",
    "हमने [Keras उदाहरण भंडार](https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py) से उधार लिया। अपने वर्गीकरण मॉडल को प्रशिक्षित करने के लिए, आप बस नीचे दिए गए सेल को चलाते हैं।"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from __future__ import print_function\n",
    "import tensorflow.keras as keras\n",
    "from tensorflow.keras.datasets import mnist\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense, Dropout, Flatten\n",
    "from tensorflow.keras.layers import Conv2D, AveragePooling2D\n",
    "from tensorflow.keras.layers import Activation\n",
    "\n",
    "batch_size = 128\n",
    "num_classes = 10\n",
    "epochs = 2\n",
    "\n",
    "# input image dimensions\n",
    "img_rows, img_cols = 28, 28\n",
    "\n",
    "# the data, split between train and test sets\n",
    "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
    "\n",
    "x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)\n",
    "x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)\n",
    "input_shape = (img_rows, img_cols, 1)\n",
    "\n",
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')\n",
    "x_train /= 255\n",
    "x_test /= 255\n",
    "print('x_train shape:', x_train.shape)\n",
    "print(x_train.shape[0], 'train samples')\n",
    "print(x_test.shape[0], 'test samples')\n",
    "\n",
    "# convert class vectors to binary class matrices\n",
    "y_train = keras.utils.to_categorical(y_train, num_classes)\n",
    "y_test = keras.utils.to_categorical(y_test, num_classes)\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "model.add(Conv2D(10, (3, 3), input_shape=input_shape))\n",
    "model.add(AveragePooling2D((2, 2)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv2D(32, (3, 3)))\n",
    "model.add(AveragePooling2D((2, 2)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv2D(64, (3, 3)))\n",
    "model.add(AveragePooling2D((2, 2)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Flatten())\n",
    "model.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "model.compile(loss=keras.losses.categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adam(),\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "model.fit(x_train, y_train,\n",
    "          batch_size=batch_size,\n",
    "          epochs=epochs,\n",
    "          verbose=1,\n",
    "          validation_data=(x_test, y_test))\n",
    "score = model.evaluate(x_test, y_test, verbose=0)\n",
    "print('Test loss:', score[0])\n",
    "print('Test accuracy:', score[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "## भविष्य की निजी भविष्यवाणी के लिए अपने मॉडल के वजन को सहेजें"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "lang": "hi"
   },
   "source": [
    "बहुत बढ़िया! आपका मॉडल प्रशिक्षित है। चलो `model.save()` के साथ मॉडल वज़न सहेजें। अगली नोटबुक में, हम निजी भविष्यवाणियों की सेवा शुरू करने के लिए Syft Keras में इन भारों को लोड करेंगे।"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save('short-conv-mnist.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "hi",
   "useGoogleTranslate": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
